﻿#region LGPL
/************************************************************************************/
/* Fireball.Windows.Forms a controls library for windows forms
 * 
 * Copyright (C) 2009 Sebastian Faltoni
 * 
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the 
 * Free Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 * This library is distributed in the hope that it will be useful, but 
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 
 * for more details.
 * You should have received a copy of the GNU Lesser General Public License along
 * with this library; if not, write to the Free Software Foundation, Inc., 59 
 * Temple Place, Suite 330, Boston, MA 02111-1307 USA
 * 
 * Signature of Sebastian Faltoni, 2 Febbraio 2009
 * Sebastian Faltoni, President of Orangebit
 * 
 ***********************************************************************************/
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace Orangebit.Windows.Forms
{
    /// <summary>
    /// Implement this Interface for creating your custom Theme
    /// </summary>
    public interface IExplorerBarTheme
    {
        /// <summary>
        /// This Method is called when a ExplorerBarItem is Invalidated,
        /// ExplorerBarItem is Trasparent by default so if you don't fill the background
        /// with something, you will get a transparent control
        /// </summary>
        /// <param name="item">The Item wich is calling the Paint</param>
        /// <param name="evt">The PaintEventArgs of the current item</param>
        void PaintExplorerItem(ExplorerBarItem item, PaintEventArgs evt);
        /// <summary>
        /// This method is called by the ExplorerBar Control when it's Invalidated.
        /// </summary>
        /// <param name="explorerBar">The ExplorerBar Control</param>
        /// <param name="evt">The PaintEventArgs of the ExplorerBar Control</param>
        void PaintExplorerBar(ExplorerBar explorerBar, PaintEventArgs evt);
        /// <summary>
        /// This event is called when an explorer item is being resized, you should
        /// use this event for example if you need to regenerate your brushes
        /// </summary>
        /// <param name="item">The ExplorerBarItem being resized</param>
        void OnExplorerBarItemSizeChanged(ExplorerBarItem item);
        /// <summary>
        /// This event is called when the ExplorerBar Controls is being Resized, you should
        /// use this event for example if you need to regenerate your brushes
        /// </summary>
        /// <param name="explorerBar">The ExplorerBar Control</param>
        void OnExplorerBarSizeChanged(ExplorerBar explorerBar);
        /// <summary>
        /// Use this method for calculating and to return the Collapsed Height for 
        /// the ExplorerBarItem
        /// </summary>
        /// <param name="item">The ExplorerBarItem for witch get the height</param>
        /// <returns>The Collapsed height of the Item</returns>
        int GetCollapsedHeight(ExplorerBarItem item);
        /// <summary>
        /// Use this Method for generating the ToogleButtonArea
        /// </summary>
        /// <param name="item">The ExplorerBarItem for witch get the Area</param>
        /// <returns>The generated Rectangle</returns>
        Rectangle GetToogleButtonArea(ExplorerBarItem item);
        /// <summary>
        /// Use this method for calculating the Area for the ExplorerBarItem Header Text 
        /// </summary>
        /// <param name="item">The ExplorerBarItem for witch get the Header Text Area</param>
        /// <returns>The Header Text Rectangle</returns>
        Rectangle GetHeaderTextArea(ExplorerBarItem item);
    }
}
